package com.haohan.jingyuan.user.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.haohan.jingyuan.common.enums.RoleStatusEnum;
import com.haohan.jingyuan.user.entity.RoleInfo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.Date;

/**
 * 角色信息Mapper接口
 *
 * @ClassName RoleInfoMapper
 * @Description 角色信息数据访问层
 * @Author hexijun
 * @Time 2025/01/19 10:20
 * @Version 1.0
 */
@Mapper
public interface RoleInfoMapper extends BaseMapper<RoleInfo> {

    /**
     * 根据角色ID查询角色信息
     *
     * @param roleId 角色ID
     * @return 角色信息
     */
    RoleInfo findByRoleId(@Param("roleId") String roleId);

    /**
     * 根据角色名称查询用户信息
     *
     * @param roleName
     * @return
     */
    RoleInfo findByRoleName(@Param("roleName") String roleName);

    /**
     * 根据角色ID更新角色信息
     *
     * @param roleId        角色ID
     * @param roleName      角色名称
     * @param roleStatus    角色状态
     * @param roleResources 角色资源
     * @param modifier      修改人
     * @return 更新的行数
     */
    int updateRoleByRoleId(@Param("roleId") String roleId,
                           @Param("roleName") String roleName,
                           @Param("roleStatus") RoleStatusEnum roleStatus,
                           @Param("roleResources") String roleResources,
                           @Param("modifier") String modifier);

    /**
     * 根据角色ID删除角色信息（逻辑删除）
     *
     * @param roleId   角色ID
     * @param modifier 修改人
     * @return 删除的行数
     */
    int deleteRoleByRoleId(@Param("roleId") String roleId, @Param("modifier") String modifier);

    /**
     * 分页查询角色列表
     *
     * @param page 分页对象
     * @param roleName 角色名称（可空）
     * @param roleStatus 角色状态（可空）
     * @param gmtCreatedStart 创建时间开始（可空）
     * @param gmtCreatedEnd 创建时间结束（可空）
     * @return 分页角色列表
     */
    IPage<RoleInfo> selectRoleListPage(Page<RoleInfo> page,
                                      @Param("roleName") String roleName,
                                      @Param("roleStatus") String roleStatus,
                                      @Param("gmtCreatedStart") Date gmtCreatedStart,
                                      @Param("gmtCreatedEnd") Date gmtCreatedEnd);
}
